<?php
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

require_once 'Zend/Controller/Action.php';
require_once dirname(dirname(__FILE__)) . '/forms/NuevaLocalidadForm.php';
//require_once dirname(dirname(__FILE__)) . '/forms/EditarLocalidad.php';
//require_once dirname(dirname(__FILE__)) . '/forms/EliminarLocalidad.php';
//require_once dirname(dirname(__FILE__)) . '/forms/MostrarLocalidad.php';
require_once dirname(dirname(__FILE__)) . '/forms/BuscarLocalidad.php';
require_once dirname(dirname(__FILE__)) . '/forms/ConsultarLocalidades.php';

require_once dirname(dirname(__FILE__)) . '/models/Single/LocalidadEntity.php';

/**
 * Description of LocalidadController
 *
 * @author kristian
 */
class LocalidadController extends Zend_Controller_Action{
    protected $_flashMessenger = null;
    private $destinoRedireccion = '/localidad';

    public function init()
    {
        $this->initView();
        $this->_flashMessenger = $this->_helper->FlashMessenger;
        $this->view->baseUrl = $this->_request->getBaseUrl();
        $this->view->messages = $this->_flashMessenger;
    }

    public function indexAction()
    {
        $this->view->title = "Administracion de Localidades";
        $this->consultarAction();
    }

    public function consultarAction()
    {
        $this->view->title = "Listado de Localidades";
        $localidad = new Spalm_Model_Single_LocalidadEntity();
        $this->view->localidades = $localidad->fetchAll();
        $this->view->accion = 'consulta_localidades';
    }

    public function nuevaAction()
    {
        $this->view->accion = 'nueva_localidad';
        $this->view->title = "Agregar nueva Localidad";
        $this->view->setScriptPath(APPLICATION_PATH . '/views/scripts');
        $form = new NuevaLocalidadForm();
        //$form = $this->view->form;
        $form->setView($this->view);
        $form->setAction($this->view->baseUrl . '/localidad/nueva');
        $this->view->form = $form;
        //$this->view->controlador = $this;
        $localidad = new Spalm_Model_Single_LocalidadEntity();
        $this->view->localidades = $localidad->fetchAll();

        if($this->getRequest()->isPost()) {
            $formData = $this->_request->getPost();
            if (!$form->isValid($formData)) {
                $this->view->form = $form;
                $form->populate($formData);
                //return $this->render('form');
                return;
            }

            try {
                $provincia = new Spalm_Model_Single_ProvinciaEntity();
                $localidad = new Spalm_Model_Single_LocalidadEntity();

                //arma el objeto de provincias
                $provincia = $provincia->find( (int) $form->getValue('provincia'));

                $localidad->setCodigoPostal($form->getValue('codigoPostal'));
                $localidad->setNombre($form->getValue('nombre'));
                $localidad->setProvincia($provincia);


                $localidad->save();

                $this->_flashMessenger->addMessage('La localidad ha sido guardada con &eacute;xito');
                $this->_redirect($this->destinoRedireccion);

            } catch (Exception $e) {
                $this->_flashMessenger->addMessage($e->getMessage());
            }
        }

        //$this->render('nueva_localidad');
    }

    public function editarAction()
    {
        $id = (int)$this->_request->getParam('id', 0);
        $this->view->title = "Editar Localidad";


        $localidad = new Spalm_Model_Single_LocalidadEntity();
        $localidad = $localidad->find($id);

        $form = new NuevaLocalidadForm($localidad,true);
        $form->setAction($this->view->baseUrl . '/localidad/editar/id/' . $id);

        if (null === $cliente) {
            $this->_flashMessenger->addMessage('La localidad no existe');
            $this->_redirect($this->destinoRedireccion);
        }

        if ($this->_request->isPost())
        {
            $formData = $this->_request->getPost();
            if (!$form->isValid($formData)) {
                $this->view->form = $form;
                $form->populate($formData);
                return $this->render('form');
            }

            try {
                $provincia = new Spalm_Model_Single_ProvinciaEntity();
                $provincia = $provincia->find($form->getValue('provincia'));

                $localidad->setNombre($form->getValue('nombre'));
                $localidad->setProvincia($provincia);


                $localidad->save();

                $this->_flashMessenger->addMessage('La localidad ha sido guardado con &eacute;xito');
                $this->_redirect($this->destinoRedireccion);

            } catch (Exception $e) {
                $this->_flashMessenger->addMessage($e->getMessage());
            }
        }

        $this->view->cliente = $cliente;
        $form->populate($this->view->cliente->toArray());
        $this->view->form = $form;
        $this->render('form');
    }

    public function eliminarAction()
    {
        $id = (int)$this->_request->getParam('id', 0);

        $cliente = new Spalm_Model_Single_LocalidadEntity();
        $cliente = $cliente->find($id);

        if (null !== $cliente) {
            try {

                $cliente->remove();

                $this->_flashMessenger->addMessage('La localidad ha sido eliminada con &eacute;xito');
            } catch (Exception $e) {
                $this->_flashMessenger->addMessage($e->getMessage());
            }
        } else{
            $this->_flashMessenger->addMessage('La localidad no existe');
        }

        $this->_redirect($this->destinoRedireccion);
    }

    public function mostrarAction() {
         $this->view->title = "Ver detalle de la Localidad";


        $cliente = new Spalm_Model_Single_ClienteEntity();
        $cliente = $cliente->find($id);

        $form = new NuevaLocalidadForm($cliente);
    }

    public function buscarAction() {
        $this->view->title = "Buscar Localidades";

        $form = new BuscarLocalidad();

        if ($this->_request->isPost())
        {
            $formData = $this->_request->getPost();
            if (!$form->isValid($formData)) {
                $this->view->form = $form;
                $form->populate($formData);
                return $this->render('form');
            }

            $valores = $form->getValues();

            $aBuscar = $valores['buscado'];
            $criterio = $valores['criterio'];

            $localidadesModel = new Spalm_Model_Single_LocalidadEntity();
            $localidadesRows = $localidadesModel->getMapper()->getDbTable()->find("$criterio = $aBuscar");

            $this->_redirect($this->destinoRedireccion . '/consulta');
        }
    }
}
?>
